home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 3 / Cream of the Crop 3.iso / comm / wnos5src.zip / SCC.H < prev    next >
C/C++ Source or Header  |  1993-10-07  |  7KB  |  158 lines

  1. #ifndef    _SCC_H
  2. #define    _SCC_H
  3.  
  4. /* Definitions for Z8530 SCC driver by PE1CHL
  5.  * Adapted for NOS 1/23/90
  6.  * Ken Mitchum KY3B
  7.  * km@speedy.cs.pitt.edu
  8.  * km@cadre.dsl.pitt.edu
  9.  */
  10. #ifndef    _MBUF_H
  11. #include "mbuf.h"
  12. #endif
  13.  
  14. #ifndef    _IFACE_H
  15. #include "iface.h"
  16. #endif
  17.  
  18. #ifndef _N8250_H
  19. #include "n8250.h"
  20. #endif
  21.  
  22. #define    INLINE 1
  23.  
  24. typedef int16 ioaddr;               /* type definition for an 'io port address' */
  25. #define MAXSCC      4               /* maximal number of SCC chips supported */
  26. #define TPS     (1000/MSPTICK)      /* scctim() ticks per second  */
  27.  
  28. # if defined(INLINE)
  29. /* special delay construction only necessary when inline IN/OUT is used */
  30. #define D(v)        scc_delay(v)    /* delay for 5 PCLK cycles (or more) */
  31. #define RDREG(a)    (D(inportb(a))) /* read any input port */
  32. #define WRREG(a,v)  {outportb(a,v); D(1);}  /* write any output port */
  33. #define RDSCC(c,r)    (outportb(c,r), D(1), D(inportb(c))) /* read SCC reg */
  34. #define WRSCC(c,r,v)    {outportb(c,r); D(1); outportb(c,v); D(1);} /* write SCC reg*/
  35. # else
  36. #define RDREG(a)    (inportb(a))    /* read any input port */
  37. #define WRREG(a,v)    {outportb(a,v);}    /* write any output port */
  38. #define RDSCC(c,r)    (outportb(c,r), inportb(c)) /* read SCC reg */
  39. #define WRSCC(c,r,v)    {outportb(c,r); outportb(c,v);} /* write SCC reg */
  40. # endif
  41.  
  42. #define HWEAGLE        0x01    /* hardware type for EAGLE card */
  43. #define HWPC100        0x02    /* hardware type for PC100 card */
  44. #define HWPRIMUS    0x04    /* hardware type for PRIMUS-PC (DG9BL) card */
  45. #define HWDRSI        0x08    /* hardware type for DRSI PC*Packet card */
  46. #define HWBAYCOM    0x10    /* hardware type for BAYCOM-USCC card */
  47.  
  48. #ifndef VOID
  49. #define VOID(x)     (x)     /* not necessary for most compilers */
  50. #endif
  51.  
  52. struct sccinfo {
  53.     int init;        /* SCC driver initialized? */
  54.     int nchips;        /* Number of SCC chips in system */
  55.     int maxchan;    /* Highest valid channel number */
  56.     ioaddr iobase;  /* Base address of first SCC */
  57.     int space;        /* Spacing between subsequent SCCs */
  58.     int off[2];        /* Offset to A and B channel control regs */
  59.     int doff;        /* Offset from control to data register */
  60.     int ivec;        /* System interrupt vector number */
  61.     long clk;        /* PCLK/RTxC frequency in Hz */
  62.     int pclk;        /* flag to use PCLK (instead of RTxC) */
  63.     int hwtype;        /* special hardware type indicator */
  64.     int hwparam;    /* special hardware parameter */
  65. };
  66. extern struct sccinfo sccinfo;
  67.  
  68. /* SCC channel control structure for AX.25 mode */
  69. struct scca {
  70.     unsigned int maxdefer;    /* Timer for CSMA defer time limit */
  71.  
  72.     unsigned int tstate;    /* Transmitter state */
  73. #define IDLE        0       /* Transmitter off, no data pending */
  74. #define DEFER       1       /* Receive Active - DEFER Transmit */
  75. #define KEYUP       2       /* Permission to keyup the transmitter */
  76. #define KEYWT       3       /* Transmitter switched on, waiting for CTS */
  77. #define ACTIVE      4       /* Transmitter on, sending data */
  78. #define FLUSH       5       /* CRC sent - attempt to start next frame */
  79. #define TAIL        6       /* End of transmission, send tail */
  80.  
  81.     unsigned char txdelay;    /* Transmit Delay 10 ms/cnt */
  82.     unsigned char persist;    /* Persistence (0-255) as a % */
  83.     unsigned char slottime;    /* Delay to wait on persistence hit */
  84.     unsigned char tailtime;    /* Delay after XMTR OFF */
  85.     unsigned char fulldup;    /* Full Duplex mode 0=CSMA 1=DUP 2=ALWAYS KEYED */
  86.     unsigned char waittime;    /* Waittime before any transmit attempt */
  87.     unsigned char maxkeyup;    /* Maximum time to transmit (seconds) */
  88.     unsigned char mintime;    /* Minimal offtime after MAXKEYUP timeout */
  89.     unsigned char idletime;    /* Maximum idle time in ALWAYS KEYED mode (seconds) */
  90. };
  91.  
  92. /* SCC channel structure. one is allocated for each attached SCC channel, */
  93. /* so 2 of these are allocated for each fully utilized SCC chip */
  94. struct sccchan {
  95.     /* interrupt handlers for 4 different IP's */
  96.     /* MUST BE first 4 elements of this structure, and MUST remain */
  97.     /* in the sequence Transmit-Status-Receive-Special */
  98.     void (*int_transmit)(); /* Transmit Buffer Empty interrupt handler */
  99.     void (*int_extstat)();    /* External/Status Change interrupt handler */
  100.     void (*int_receive)();    /* Receive Character Avail. interrupt handler */
  101.     void (*int_special)();    /* Special Receive Condition interrupt handler */
  102.  
  103.     /* don't insert anything before "ctrl" (see assembly interrupt handler) */
  104.     ioaddr ctrl;            /* I/O address of CONTROL register */
  105.     ioaddr data;            /* I/O address of DATA register for this channel */
  106.  
  107.     unsigned char wreg[16]; /* Copy of last written value in WRx */
  108.     unsigned char status;    /* Copy of R0 at last external interrupt */
  109.     unsigned char txchar;    /* Char to transmit on next TX interrupt */
  110.  
  111.     struct fifo fifo;
  112.     struct scca a;          /* control structure for AX.25 use */
  113.  
  114.     struct mbuf *rbp;       /* Head of mbuf chain being filled */
  115.     struct mbuf *rbp1;      /* Pointer to mbuf currently being written */
  116.     struct mbuf *sndq;      /* Encapsulated packets awaiting transmission */
  117.     struct mbuf *tbp;       /* Transmit mbuf being sent */
  118.  
  119.     struct iface *iface;    /* associated interface structure */
  120.  
  121.     int bufsiz;
  122.  
  123.     unsigned int timercount;    /* 10ms timer for AX.25 use */
  124.     int group;              /* group ID for AX.25 TX interlocking */
  125. #define NOGROUP     0       /* not member of any group */
  126. #define RXGROUP     0x100   /* if set, only tx when all channels clear */
  127. #define TXGROUP     0x200   /* if set, don't transmit simultaneously */
  128.  
  129.     long speed;             /* Line speed, bps */
  130.     char extclock;          /* External clock source on RTxC/TRxC */
  131.     char fulldup;           /* External divider for fulldup available */
  132.     char tx_inhibit;        /* Transmit is not allowed when set */
  133.     char dum;               /* filler (keep addr even for speed) */
  134.  
  135.     /* statistic information on this channel */
  136.     long rxints;            /* Receiver interrupts */
  137.     long txints;            /* Transmitter interrupts */
  138.     long exints;            /* External/status interrupts */
  139.     long spints;            /* Special receiver interrupts */
  140.  
  141.     long enqueued;          /* Packets actually forwarded */
  142.     long rxframes;          /* Number of Frames Actally Received */
  143.     long rxerrs;            /* CRC Errors or KISS errors */
  144.     unsigned int nospace;    /* "Out of buffers" */
  145.     unsigned int rovers;    /* Receiver Overruns */
  146. };
  147. extern struct sccchan *sccchan[];
  148. #define NULLCHAN    (struct sccchan *)0
  149.  
  150. /* Z8530 SCC Register access macros */
  151.  
  152. #define rd(scc,reg)    RDSCC((scc)->ctrl,(reg))
  153. #define wr(scc,reg,val) WRSCC((scc)->ctrl,(reg),((scc)->wreg[reg] = val))
  154. #define or(scc,reg,val) WRSCC((scc)->ctrl,(reg),((scc)->wreg[reg] |= val))
  155. #define cl(scc,reg,val) WRSCC((scc)->ctrl,(reg),((scc)->wreg[reg] &= ~(val)))
  156.  
  157. #endif    /* _SCC_H */
  158.